package com.aisino.service;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.enterprise.inject.New;

import com.aisino.util.BigDecimalUtil;
import com.aisino.util.MapAndObjectUtil;
import org.springframework.stereotype.Service;







import com.aisino.entity.TOrderData;
import com.aisino.mapper.HeBingMapper;
import com.aisino.util.HandleDataUtil;

@Service
public class HeBingService {
	@Resource
	private HeBingMapper heBingMapper;
	
	static final String maxMoney="100000";
	
	static final BigDecimal max=new BigDecimal(maxMoney);
	public Object chaifen(){
		Map<String, String>map=new HashMap<>();
		map.put("DJHM", "XSAZDA00406709");
		map.put("OHID", "");
		map.put("isNega", "");// 是否查询负数
		// 获取一张发票的明细
		List<Map<String, Object>> list = heBingMapper.getLineData(map);
		
//		BigDecimal hjje=new BigDecimal("0");
//		BigDecimal hjse=new BigDecimal("0");
		BigDecimal jshj=new BigDecimal("0");
		
		// 计算加税合计等
		for(int i=0;i<list.size();i++){
			Map<String, Object> mapTemp = list.get(i);
			BigDecimal temp= BigDecimalUtil.add(jshj, (BigDecimal)mapTemp.get("JE"));
			jshj=temp;
		}
		
		// 如果加税合计超限就需要拆分
		if(jshj.compareTo(new BigDecimal(maxMoney))>=0){
			// 查看是否有单行超限,将单行超限的商品按数量拆分
			for(int j=0;j<list.size();j++){
				Map<String, Object> mapTemp = list.get(j);
				// 单行超限按数量拆分
				// 首先确保每行都在限额以下
				BigDecimal temp=(BigDecimal)mapTemp.get("JE");
				if(temp.compareTo(max)>=0){
					// 根据单价*数量查看最大能够有多少数量,向下取整
					int maxNum=max.divide((BigDecimal)mapTemp.get("DJ"),2, RoundingMode.HALF_UP).intValue();
					int sl=(int)mapTemp.get("SL");
					// 查看这个数量可以分成几分
					int fen=sl/maxNum;
					
					// 总金额会分成几个最大限额
					BigDecimal num=temp.divide(max, 2, RoundingMode.HALF_UP);
					int moneyPingJun=num.intValue();
//					int sl=(int)mapTemp.get("SL");
					// 如果拆分数量不足以开票数量拆分出小数点
					if(sl>moneyPingJun){
						
					}else{
						// 如果数量可以拆分出将不出现小数点
						
					}
					
					// 根据金额大小决定会拆分出几条明细
					for(int x=0;x<moneyPingJun;x++){
						
					}
				}
			}
		}
		
		
		// 在查看是否有总金额超限
		
		
		return list;
	}
	public static void main(String[] args) {
		System.out.println(new BigDecimal("123.98").intValue());
	}
	public Object heBingInsertData(){
		Map<String, String>map=new HashMap<>();
		map.put("DJHM", "XSAZDA00406709");
		map.put("OHID", "");
		map.put("isNega", "");// 是否查询负数
		// 获取一张发票的明细
		List<Map<String, Object>> list = heBingMapper.getLineData(map);
		outer: while (true) {
			for (int j = 0; j < list.size(); j++) {
				// 获取第一个等待比较的数据
				Map<String, Object> mapOld = list.get(j);
				for (int i = j + 1; i < list.size(); i++) {
					// 获取后面的所有数据
					Map<String, Object> mapNew = list.get(i);
					// 相同则进行合并
					if (HandleDataUtil.compareMap(mapOld, mapNew)) {
						System.out.println("这个相同"+mapOld.get("SPMC"));
						// 数量进行相加
						HandleDataUtil.jeAndSlAdd(mapOld, mapNew, "SL");
						// 金额进行相加
						HandleDataUtil.jeAndSlAdd(mapOld, mapNew, "JE");
						
						// 将新的orderline金额与数量更新
						heBingMapper.updateLineJeAndSl(mapOld);
						
						// 删除旧的orderline并加入待执行的sql
						heBingMapper.deleteYiHeBing((String)mapNew.get("ODID"));
						
						// list移除当前已被合并的orderline
						list.remove(i);
						
						// 处理完一条数据后就重新进行比较
						continue outer;
					}
				}
			}
			break outer;
		}
		
		return heBingMapper.getLineData(map);
	}
	
	
	public List<TOrderData> heBingReturnData(String DJHM){
        Map<String, String>map=new HashMap<>();
        map.put("DJHM", DJHM);
        map.put("OHID", "");
        map.put("isNega", "");// 是否查询负数
        // 获取一张发票的明细
        List<Map<String, Object>> list = heBingMapper.getLineData(map);
        System.out.println("输出"+list);
        List<TOrderData> newList = new ArrayList<>();

        outer: while (true) {
            for (int j = 0; j < list.size(); j++) {
                // 获取第一个等待比较的数据
                Map<String, Object> mapOld = list.get(j);
                for (int i = j + 1; i < list.size(); i++) {
                    // 获取后面的所有数据
                    Map<String, Object> mapNew = list.get(i);
                    // 相同则进行合并
                    if (HandleDataUtil.compareMap(mapOld, mapNew)) {
                        System.out.println("这个相同"+mapOld.get("SPMC"));
                        // 数量进行相加
                        HandleDataUtil.jeAndSlAdd(mapOld, mapNew, "SL");
                        // 金额进行相加
                        HandleDataUtil.jeAndSlAdd(mapOld, mapNew, "JE");

//	                        // 将新的orderline金额与数量更新
//	                        heBingMapper.updateLineJeAndSl(mapOld);
//
//	                        // 删除旧的orderline并加入待执行的sql
//	                        heBingMapper.deleteYiHeBing((String)mapNew.get("ODID"));

                        // list移除当前已被合并的orderline
                        list.remove(i);

                        // 处理完一条数据后就重新进行比较
                        continue outer;
                    }
                }
            }
            break outer;
        }

        // 赋值
        for(int i=0;i<list.size();i++) {
            TOrderData tOrderData = new TOrderData();
            MapAndObjectUtil.copyPropertiesInclude(list.get(i),tOrderData);
            newList.add(tOrderData);
        }
        return newList;
    }

	
}
